similar 0.4.0

A diff library for Rust
Documentation

similar

Build Status Crates.io License Documentation

Similar is a dependency free crate for Rust that implements different diffing algorithms and high level interfaces for it. It is based on the pijul implementation of the Myer's and Patience algorithms and inherits some ideas from there.

It's intended to be replacement for the popular but unmaintained [difference] crate.

use similar::text::{ChangeTag, TextDiff};

fn main() {
    let diff = TextDiff::from_lines(
        "Hello World\nThis is the second line.\nThis is the third.",
        "Hallo Welt\nThis is the second line.\nThis is life.\nMoar and more",
    );

    for op in diff.ops() {
        for change in diff.iter_changes(op) {
            let sign = match change.tag() {
                ChangeTag::Delete => "-",
                ChangeTag::Insert => "+",
                ChangeTag::Equal => " ",
            };
            print!("{}{}", sign, change.value());
        }
    }
}

What's in the box?

  • Myer's diff
  • Patience diff
  • Line, word, character and grapheme level diffing
  • Unified diff generation

License and Links